package com.core.views;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * 对webView组件做简单封装方便调用 Created by 殷田 on 2017/12/15.
 */

public class IWebView extends WebView
{

	public IWebView( Context context )
	{
		this( context, null );
	}

	public IWebView( Context context, AttributeSet attrs )
	{
		this( context, attrs, 0 );
	}

	public IWebView( Context context, AttributeSet attrs, int defStyleAttr )
	{
		super( context, attrs, defStyleAttr );
		init( context );
	}

	private void init( Context context )
	{
		defaultSet();
		defaultClient();
	}

	private void defaultSet()
	{
		WebSettings webSettings = getSettings();

		// 如果访问的页面中要与Javascript交互，则webview必须设置支持Javascript
		webSettings.setJavaScriptEnabled( true );

		// 支持插件
		// webSettings.setPluginsEnabled(true);

		// 设置自适应屏幕，两者合用
		webSettings.setUseWideViewPort( true ); // 将图片调整到适合webview的大小
		webSettings.setLoadWithOverviewMode( true ); // 缩放至屏幕的大小

		// 缩放操作
		webSettings.setSupportZoom( true ); // 支持缩放，默认为true。是下面那个的前提。
		webSettings.setBuiltInZoomControls( true ); // 设置内置的缩放控件。若为false，则该WebView不可缩放
		webSettings.setDisplayZoomControls( false ); // 隐藏原生的缩放控件

		// 其他细节操作
		webSettings.setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK ); // 关闭webview中缓存
		webSettings.setAllowFileAccess( true ); // 设置可以访问文件
		webSettings.setJavaScriptCanOpenWindowsAutomatically( true ); // 支持通过JS打开新窗口
		webSettings.setLoadsImagesAutomatically( true ); // 支持自动加载图片
		webSettings.setDefaultTextEncodingName( "utf-8" );// 设置编码格式
	}
	
	private void defaultClient() {
        setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                //网页开始加载
                
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                //网页加载完成
              
            }

            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                //网页加载出错
              
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                //处理https请求
                handler.proceed();
            }
        });

        setWebChromeClient(new WebChromeClient() {

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
               
            }

            @Override
            public void onReceivedTitle(WebView view, String title) {
              
            }
        });
    }

	@Override
	public void destroy()
	{
		try
		{
			ViewParent parent = getParent();
			if ( parent != null )
			{
				( ( ViewGroup ) parent ).removeView( this );
			}
			stopLoading();
			// 退出时调用此方法，移除绑定的服务，否则某些特定系统会报错
			getSettings().setJavaScriptEnabled( false );
			clearHistory();
			removeAllViews();
		}
		catch ( Exception e )
		{
			e.printStackTrace();
		}
		super.destroy();
	}
}
